AjaxUtil = {
	// 判断是否登录
	isLogin: function(token) {
		return AjaxUtil.getJson("staff/isLogin");
	},

	preDeal: function(resp) { // 预处理请求结果
		if(resp == null) {
			SwalUtil.error("请求失败,请刷新浏览器后重试!");
			return null;
		}
		if(resp.code == 200) { // 成功
			return resp;
		}

		if(resp.code == 422) { // 还没有登录,跳转到登录的页面
			SwalUtil.error("您还没有登录,请先登录!");
			setTimeout(function() { // 延时2s后执行
				window.location.href = BaseConfig.loginUrl;
			}, 1000);
			return null;
		}
		if(resp.code == 403) { // 没有权限
			SwalUtil.error("没有权限,请联系管理员!");
			return null;
		}

		if(resp.code == 412) { // 参数错误!
			SwalUtil.error(resp.msg);
			return null;
		}

		SwalUtil.error(resp.msg);
		return null;
	},

	// 获取对象(get请求)
	getJson: function(url, params) {
		try {
			var obj = $.ajax({
				url: BaseConfig.preUrl + url + '?token=' + localStorage.token + '&' + params,
				async: false,
				dataType: 'json',
				error: function() {
					SwalUtil.error("请求失败,请刷新浏览器后重试!");
					return null;
				}
			});

			return AjaxUtil.preDeal(obj.responseJSON);
		} catch(e) {
			SwalUtil.error("请求失败,请刷新浏览器后重试!");
			return null;
		}
	},

	// post获取json
	postJson: function(url, params) {
		try {
			var obj = $.ajax({
				url: BaseConfig.preUrl + url + '?token=' + localStorage.token,
				async: false,
				type: "POST",
				data: params,
				dataType: 'json',
				contentType: "application/x-www-form-urlencoded;charset=utf-8",
				error: function(responseText, status, statusText) {
					console.log(statusText);
					SwalUtil.error("请求失败,请刷新浏览器后重试!");
					return null;
				}
			});
			return AjaxUtil.preDeal(obj.responseJSON);
		} catch(e) {
			SwalUtil.error("请求失败,请刷新浏览器后重试!");
			return null;
		}
	}
};

SwalUtil = {
	// 基础提示信息,1000ms后自动关闭
	basic: function(msg) {
		swal({
			title: msg,
			showConfirmButton: false,
			timer: 1000
		});
		// .then(function() {}, function(dismiss) {});不兼容V1
	},
	// 成功的提示消息,600ms后自动关闭
	success: function(msg) {
		swal({
			title: msg,
			type: "success",
			confirmButtonText: '确定',
			timer: 1500
		});
	},
	// 错误的提示消息不自动关闭
	error: function(msg) {
		swal({
			title: msg,
			confirmButtonText: '确定',
			type: "error",
		});
	},
	// 确定提示框
	confirm: function(onConfirm, title, text) {
		if(!title) {
			title = '您确定要执行该操作吗?';
		}
		if(!text) {
			text = '该操作无法撤销!'
		}
		swal({
			title: title,
			text: text,
			type: 'warning',
			showCancelButton: true,
            closeOnConfirm: false,
			confirmButtonText: '确定',
			cancelButtonText: '取消',
		},onConfirm);
	},
	// 输入提示框
	input: function (fun,title,text,code) {
        swal({
            title: title,
            text: text,
            type: "input",
            showCancelButton: true,
            closeOnConfirm: false
        }, function(inputValue) {
            if (inputValue === false)
                return false;
            else if (inputValue === "") {
                swal.showInputError(text);
                return false
            } else {
            	var state = fun(inputValue);
            	return state==null?false:state;
            }
        });
    },
	// showLoading
	showLoading: function() {
		swal.showLoading();
	},
	// hideLoading
	hideLoading: function() {
		swal.hideLoading();
	}
};

ParamUtil = {
	// 获取GET参数
	getQueryString: function(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
		var r = window.location.search.substr(1).match(reg);
		if(r != null)
			return decodeURI(r[2]);
		return null;
	},
	// 校验是否是数字
	isNum: function(str) {
		var reg = new RegExp("^\d{n}$");
		return reg.test(str);
	}
};

FormatUtil = {
	// 将时间ms值转化为'yyyy-MM-dd'格式的字符串
	formatDate: function(ms) {
		var d = new Date(ms);
		var year = d.getFullYear();
		var month = d.getMonth() + 1;
		if(month < 10) {
			month = '0' + month;
		}
		var date = d.getDate();
		if(date < 10) {
			date = '0' + date;
		}
		return year + "-" + month + "-" + date;
	},

	// 将时间ms值转化为'HH:mm'格式的字符串
	formatTime: function(ms) {
		var d = new Date(ms);
		var hour = d.getHours();
		var minute = d.getMinutes();
		return hour + ":" + minute;
	},

	// 将时间ms值转化为'yyyy-MM-dd HH:mm:ss'格式的字符串
	formatDateTime: function(ms) {
		var d = new Date(ms);
		var year = d.getFullYear();
		var month = d.getMonth() + 1;
		if(month < 10) {
			month = '0' + month;
		}
		var date = d.getDate();
		if(date < 10) {
			date = '0' + date;
		}
		var hour = d.getHours();
		if(hour < 10) {
			hour = '0' + hour;
		}
		var minute = d.getMinutes();
		if(minute < 10) {
			minute = '0' + minute;
		}
		var second = d.getSeconds();
		if(second < 10) {
			second = '0' + second;
		}
		return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
	},

	formatPreMonth: function(ms) {
		var d = new Date(ms);
		var year = d.getFullYear();
		var month = d.getMonth() + 1;
		if(month == 1) {
			month = 12;
			year--;
		} else {
			month--;
		}
		if(month < 10) {
			month = '0' + month;
		}
		var date = d.getDate();
		if(date < 10) {
			date = '0' + date;
		}
		return year + "-" + month + "-" + date;
	},
	// 将单位为分的金额格式化为2个小数
	formatMoney2: function(money) {
		return(money / 100).toFixed(2);
	},

	formatMoney: function(money) {
		var re = /^[0-9]+.?[0-9]*$/; // 判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/
		if(!re.test(money)) {
			return 0;
		}
		// 判断商品价格
		var reg = /(^[-+]?[1-9]\d*(\.\d{1,2})?$)|(^[-+]?[0]{1}(\.\d{1,2})?$)/;
		if(!reg.test(money)) {
			return(money / 1).toFixed(2);
		} else {
			return money;
		}

	}

};

FormUtil = {
	createSelectItem: function(items, selected) {
		var str = '';
		for(var i in items) {
			if(items[i].value == selected) {
				str += '<option value="' + items[i].value + '" selected>' + items[i].name + '</option>';
			} else {
				str += '<option value="' + items[i].value + '">' + items[i].name + '</option>';
			}
		}
		return str;
	}
};

LogUtil = {
	log: function(msg, src) {
		if(BaseConfig.debug) {
			if(src) {
				console.log('[' + new Date().getTime() + '] >> ' + src + ':' + msg);
			} else {
				console.log('未指定模块输出:' + msg);
			}
		}
	}
};

PageCreateUtil = {
	/**
	 * 创建单表格的页面
	 * @param {Object} options
	 */
	createInstanceSingleTablePage: function(options) {
		var page = {};
		page.options = options;
		page.options.tableId = options.module + '_table';
		page.options.toolbarId = options.module + '_toolbar';
		page.options.modalAddId = options.module + '_modal_add';
		page.options.formAddId = options.module + '_form_add';
		page.options.modalEditId = options.module + '_modal_edit';
		page.options.formEditId = options.module + '_form_edit';

		page.init = function() {
				LogUtil.log('开始执行自动构建页面...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				if(!page.options) {
					LogUtil.log('页面对象为空,结束程序!', 'PageCreateUtil#createInstanceSingleTablePage->init()');
					return;
				} else {
					LogUtil.log('页面对象存在,正在执行自动构建页面...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				}

				LogUtil.log('开始设置标题...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				PageCreateUtil.setTitle(page.options.title);

				LogUtil.log('开始创建表格页面元素(Dom)...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				PageCreateUtil.createTableDom(page.options.tableId);

				LogUtil.log('开始创建默认增删改模块...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				var toolbar = [];
				if(page.options.defaultToolBar) {
					LogUtil.log('包含默认增删改模块,开始执行...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
					toolbar = PageCreateUtil.createDefaultToolBar(page.options);
				} else {
					LogUtil.log('不包含默认增删改模块', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				}

				LogUtil.log('开始创建额外的工具栏...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				if(options.extraToolBar) {
					LogUtil.log('包含额外的工具栏,开始执行...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
					for(var i = 0; i < options.extraToolBar.length; i++) {
						var tempFunctionName = 'extraToolbar' + i;
						eval('page.' + tempFunctionName + ' = options.extraToolBar[i].onclick'); // 创建动态方法名的方法
						options.extraToolBar[i].onclick = page.options.module + '.' + tempFunctionName;
					}

					toolbar = toolbar.concat(options.extraToolBar);
				} else {
					LogUtil.log('不包含额外的工具栏', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				}

				if(toolbar && 　toolbar.length > 0) {
					LogUtil.log('按钮组存在,正在生成按钮组...', 'PageCreateUtil#createInstanceSingleTablePage->init()');
					PageCreateUtil.createToolBar(toolbar, page.options.module);
				} else {
					LogUtil.log('按钮组不存在,跳过', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				}

				LogUtil.log('开始初始化表格', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				$('#' + page.options.tableId).bootstrapTable({
					url: page.options.url,// BaseConfig.preUrl + page.options.module + '/list?token=' + localStorage.token, // 请求后台的URL（*）
					responseHandler: function(res) {
						if(!res || res.code != '200') {
							return [];
						}
						return res.obj;
					},
					method: 'get', // 请求方式（*）
					toolbar: '#' + page.options.toolbarId, // 工具按钮用哪个容器
					striped: true, // 是否显示行间隔色,默认为false
					cache: false, // 是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
					pagination: true, // 是否显示分页（*）
					sidePagination: "client", // 分页方式：client客户端分页，server服务端分页（*）
					pageNumber: 1, // 初始化加载第一页，默认第一页
					pageSize: 10, // 每页的记录行数（*）
					pageList: [10, 25, 50, 100,200], // 可供选择的每页的行数（*）
					search: true, // 是否显示表格搜索，此搜索是客户端搜索，不会进服务端
					showColumns: true, // 是否显示内容列下拉框
					showRefresh: false, // 是否显示刷新按钮
					clickToSelect: false, // 是否启用点击选中行
					smartDisplay: true, // 智能显示分页按钮
					columns: page.options.columns,
				});
				LogUtil.log('初始化表格结束', 'PageCreateUtil#createInstanceSingleTablePage->init()');
				LogUtil.log('创建单表格页面成功!!!', 'PageCreateUtil#createInstanceSingleTablePage->init()');
			},
			page.addUI = function() {
				LogUtil.log('用户点击添加按钮', 'page#addUI()');
				$('#' + page.options.module + '_modal_add').modal('show');
			},
			page.add = function() {
				LogUtil.log('用户点击添加保存按钮', 'page#add()');
				var model = $('#' + page.options.module + '_form_add').serialize();
				LogUtil.log('添加表单的内容->' + model, 'PageCreateUtil#add()');
				var resp = AjaxUtil.postJson(page.options.module + '/add', model);
				if(resp) {
					SwalUtil.success(resp.msg);
					$('#'+ page.options.tableId).bootstrapTable('refresh');
					$('#'+ page.options.formAddId)[0].reset();
					$('#'+ page.options.modalAddId).modal('hide');
				}
			},
			page.editUI = function() {
				LogUtil.log('用户点击修改按钮', 'page#editUI()');
				var rows = $('#' + page.options.tableId).bootstrapTable('getSelections');
				if(rows.length == 0) {
					SwalUtil.error("请选择要修改的记录!");
					return;
				} else if(rows.length > 1) {
					SwalUtil.error("一次只能修改一条记录!");
					return;
				} else {
					$('#' + page.options.formEditId).autofill(rows[0]);
					$('#' + page.options.modalEditId).modal('show');
				}
			},
			page.edit = function() {
				LogUtil.log('用户点击修改保存按钮', 'page#edit()');
				var model = $('#' + options.module + '_form_edit').serialize();
				LogUtil.log('修改后的表单的内容->' + model, 'page#edit()');
				var resp = AjaxUtil.postJson(page.options.module + '/edit', model);
				if(resp) {
					SwalUtil.success(resp.msg);
					$('#' + page.options.tableId).bootstrapTable('refresh');
					$('#' + page.options.formEditId)[0].reset();
                    $('#' + page.options.modalEditId).modal('hide');
				}
			},
			page.removeUI = function() {
				LogUtil.log('用户点击删除按钮', 'page#removeUI()');
				var rows = $('#' + page.options.tableId).bootstrapTable('getSelections');
				if(rows.length == 0) {
					SwalUtil.error("请选择要删除的记录!");
					return;
				} else if(rows.length > 1) {
					SwalUtil.error("一次只能删除一条记录!");
					return;
				}
				SwalUtil.confirm(function() {
					LogUtil.log('确定删除->' + model, 'page#edit()');
					var resp = AjaxUtil.postJson(page.options.module + '/remove', rows[0]);
				});
			}
		page.init();
		return page;
	},
	//私有方法,不需要暴露//////////////////////////////////////////////////////////////////
	setTitle: function(title) { // 设置标题
		if(title) {
			$("title").html(title);
			LogUtil.log('标题设置完成,标题为:' + title, 'PageCreateUtil#setTitle()');
		} else {
			LogUtil.log('标题不存在,跳过!', 'PageCreateUtil#setTitle()');
		}
	},
	createTableDom: function(tableId) { // 生成表格Dom节点
		var tableStr = '<div class="panel panel-default"><div class="panel-body"><table id="' + tableId + '"></table></div></div>';
		$('body').append(tableStr);
		LogUtil.log('创建表格页面元素(Dom)成功!', 'PageCreateUtil#createTableDom()');
	},

	// 生成默认的增删改模块(包括工具栏和模态框)
	createDefaultToolBar: function(options) {
		var toolbar = [];
		if(options.defaultToolBar.add) {
			LogUtil.log('默认增加模块开启-->调用PageCreateUtil.createDefaultAdd()生成默认添加模块', 'PageCreateUtil#createDefaultToolBar()');
			toolbar.push(PageCreateUtil.createDefaultAddToolbar(options));
		} else {
			LogUtil.log('不包含默认增加模块', 'PageCreateUtil#createDefaultToolBar()');
		}
		if(options.defaultToolBar.edit) {
			LogUtil.log('默认修改模块开启-->调用PageCreateUtil.createDefaultEdit()生成默认修改模块', 'PageCreateUtil#createDefaultToolBar()');
			// toolbar.push(PageCreateUtil.createDefaultEditToolbar(options));
            PageCreateUtil.createDefaultEditToolbar(options);// 不想要修改按钮
		} else {
			LogUtil.log('不包含默认修改模块', 'PageCreateUtil#createDefaultToolBar()');
		}
		if(options.defaultToolBar.remove) {
			LogUtil.log('默认删除模块开启-->调用PageCreateUtil.createDefaultRemove()生成默认删除模块', 'PageCreateUtil#createDefaultToolBar()');
			toolbar.push(PageCreateUtil.createDefaultRemoveToolbar(options.module));
		} else {
			LogUtil.log('不包含默认删除模块', 'PageCreateUtil#createDefaultToolBar()');
		}

		return toolbar;
	},
	createToolBar: function(toolbar, module) {
		var toolbarStr = '<div id="' + module + '_toolbar"><div class="btn-group">'
		for(var i = 0; i < toolbar.length; i++) {
			var onclick = toolbar[i].onclick + '()';
			var icon = 'asterisk';
			if(toolbar[i].glyphicon) {
				icon = toolbar[i].glyphicon;
			}
			toolbarStr += '<button type="button" class="btn btn-default" onclick="' + onclick + '"><i class="glyphicon glyphicon-' + icon + '"></i> ' + toolbar[i].name + ' </button>';
		}
		toolbarStr += '</div></div>';
		$('body').append(toolbarStr);
		LogUtil.log('按钮组创建完毕', 'PageCreateUtil#createToolBar()');
	},
	createDefaultAddToolbar: function(options) { // 生成默认的增加的模块,返回添加按钮
		var addToolBar = {
			name: '添加',
			glyphicon: 'plus',
			onclick: options.module + '.addUI'
		};
		LogUtil.log('工具栏添加按钮处理完毕-->开始处理添加模态框', 'PageCreateUtil#createDefaultAddToolbar()');
		var addModelStr = '<div class="modal fade" data-backdrop="static" id="' +
			options.modalAddId + '"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button class="close" data-dismiss="modal"><span>&times;</span></button><h4 class="modal-title"><b>添加对话框</b></h4></div><div class="modal-body"><form id="' +
			options.formAddId + '" class="form-horizontal"  role="form">';
		var columns = options.columns;
		for(var i = 0; i < columns.length; i++) {
			if(columns[i].add_form) { //该元素需要添加到模态框
				addModelStr += PageCreateUtil.createFormElement(columns[i].add_form, columns[i].title, columns[i].field);
			}
		}
		addModelStr += '</form></div><div class="modal-footer"><button class="btn btn-default" data-dismiss="modal">取消</button><button class="btn btn-primary" onclick="' + options.module + '.add()">保存</button></div></div></div></div>';
		$('body').append(addModelStr);
		LogUtil.log('自动创建增加模块结束!', 'PageCreateUtil#createDefaultAddToolbar()');
		return addToolBar;
	},
	createDefaultEditToolbar: function(options) { // 生成默认的修改的模块,返回修改按钮
		var editToolBar = {
			name: '修改',
			glyphicon: 'edit',
			onclick: options.module + '.editUI'
		};
		LogUtil.log('工具栏修改按钮处理完毕-->开始处理修改模态框', 'PageCreateUtil#createDefaultEditToolbar()');
		var editModelStr = '<div class="modal fade" data-backdrop="static" id="' +
			options.modalEditId + '"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button class="close" data-dismiss="modal"><span>&times;</span></button><h4 class="modal-title"><b>修改对话框</b></h4></div><div class="modal-body"><form id="' +
			options.formEditId + '" class="form-horizontal"  role="form">';
		var columns = options.columns;
		for(var i = 0; i < columns.length; i++) {
			if(columns[i].edit_form) { //该元素需要添加到模态框
				editModelStr += PageCreateUtil.createFormElement(columns[i].edit_form, columns[i].title, columns[i].field);
			}
		}
		editModelStr += '</form></div><div class="modal-footer"><button class="btn btn-default" data-dismiss="modal">取消</button><button class="btn btn-primary" onclick="' + options.module + '.edit()">保存</button></div></div></div></div>';
		$('body').append(editModelStr);
		LogUtil.log('自动创建增加模块结束!', 'PageCreateUtil#createDefaultAddToolbar()');
		return editToolBar;
	},

	createDefaultRemoveToolbar: function(module) { // 生成默认的修改的模块,返回修改按钮
		var editToolBar = {
			name: '删除',
			glyphicon: 'remove',
			onclick: module + '.removeUI'
		};
		LogUtil.log('工具栏删除按钮处理完毕', 'PageCreateUtil#createDefaultRemoveToolbar()');
		return editToolBar;
	},

	createFormElement: function(form, label, name) { // 自动生成表单控件
		var formElementStr = '';
		switch(form.type) {
			case 'date':
                formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9"><input type="text" name="' + name + '"  class="form-control laydate-icon  layer-date" placeholder="YYYY-MM-DD" onclick="laydate({istime: true, format: \'YYYY-MM-DD\'})"></div></div>';
                break;
			case 'hidden':
				formElementStr += '<input type="hidden" name="' + name + '"/><br>';
				break;
			case 'text':
				formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9"><input type="text" name="' + name + '"  class="form-control" placeholder="请输入文本"></div></div>';
				break;
            case 'textarea':
                formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9"><textarea style="height:200px;" name="' + name + '"  class="form-control" placeholder="请输入文本"/></div></div>';
                break;
			case 'select':
				var optionStr = '<option value = "-1">请点击下拉框选择</option>';
				if(form.items) { // 选项不为空
					if(form.items instanceof Array) { // 类型为option数组
						for(var i = 0; i < form.items.length; i++) {
							optionStr += '<option value = "' + form.items[i].value + '">' + form.items[i].name + '</option>'
						}
					}
				}
				formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9"><select class="form-control" name="' + name + '">' + optionStr + '</select></div></div>';
				break;
			case 'checkbox':
				var optionStr = '';
				if(form.items) { // 选项不为空
					if(form.items instanceof Array) { // 类型为option数组
						for(var i = 0; i < form.items.length; i++) {
							optionStr += '<label class="checkbox-inline"><input type="checkbox" name="' + name + '" value="' + form.items[i].value + '">' + form.items[i].name + '</label>'
						}
					}
				}
				formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9">' + optionStr + '</div></div>';
				break;
			case 'radio':
				var optionStr = '';
				if(form.items) { // 选项不为空
					if(form.items instanceof Array) { // 类型为option数组
						for(var i = 0; i < form.items.length; i++) {
							optionStr += '<label class="radio-inline"><input type="radio" name="' + name + '" value="' + form.items[i].value + '">' + form.items[i].name + '</label>'
						}
					}
				}
				formElementStr += '<div class="form-group"><label class="col-sm-3 control-label">' + label + '</label><div class="col-sm-9">' + optionStr + '</div></div>';
				break;
			default:
				break;
		}
		return formElementStr;
	}
}